# When a tuple that has been updated is locked, the locking command
# should traverse the update chain; thus, a DELETE should not be able
# to proceed until the lock has been released.

setup
{
  CREATE TABLE foo (
	key		int PRIMARY KEY,
	value	int
  );
}

setup
{
  INSERT INTO foo VALUES (1, 1);
}
teardown
{
  DROP TABLE foo;
}

session "s1"
setup		{ BEGIN; }
step "s1s"	{ SAVEPOINT f; }
step "s1u"	{ UPDATE foo SET key = 2; }	# obtain KEY REVOKE
step "s1r"	{ ROLLBACK TO f; } # lose KEY REVOKE
step "s1l"	{ SELECT * FROM foo FOR KEY SHARE; }
step "s1c"	{ COMMIT; }

session "s2"
setup		{ BEGIN; }
step "s2l"	{ SELECT * FROM foo FOR KEY SHARE; }
step "s2c"	{ COMMIT; }

permutation "s1s" "s1u" "s1r" "s1l" "s1c" "s2l" "s2c"
permutation "s1s" "s1u" "s1r" "s1l" "s2l" "s1c" "s2c"
permutation "s1s" "s1u" "s1r" "s1l" "s2l" "s2c" "s1c"
permutation "s1s" "s1u" "s1r" "s2l" "s1l" "s1c" "s2c"
permutation "s1s" "s1u" "s1r" "s2l" "s1l" "s2c" "s1c"
permutation "s1s" "s1u" "s1r" "s2l" "s2c" "s1l" "s1c"
permutation "s1s" "s1u" "s2l" "s1r" "s1l" "s1c" "s2c"
permutation "s1s" "s1u" "s2l" "s1r" "s1l" "s2c" "s1c"
permutation "s1s" "s1u" "s2l" "s1r" "s2c" "s1l" "s1c"
permutation "s1s" "s2l" "s1u" "s2c" "s1r" "s1l" "s1c"
permutation "s1s" "s2l" "s2c" "s1u" "s1r" "s1l" "s1c"
permutation "s2l" "s1s" "s1u" "s2c" "s1r" "s1l" "s1c"
permutation "s2l" "s1s" "s2c" "s1u" "s1r" "s1l" "s1c"
permutation "s2l" "s2c" "s1s" "s1u" "s1r" "s1l" "s1c"
